/**
 * 智学Web应用 - 后端主服务器文件
 * 
 * 这个文件是整个后端应用的入口点，负责：
 * 1. 创建Express服务器
 * 2. 配置中间件（CORS、JSON解析等）
 * 3. 连接MySQL数据库
 * 4. 注册路由
 * 5. 启动服务器监听
 */

const express = require('express');
const cors = require('cors');
const mysql = require('mysql2/promise');
require('dotenv').config();

// 创建Express应用实例
const app = express();

// 基础配置
const PORT = process.env.PORT || 3000;
const DB_CONFIG = {
  host: process.env.DB_HOST || 'localhost',
  user: process.env.DB_USER || 'root',
  password: process.env.DB_PASSWORD || '123456',
  database: process.env.DB_NAME || 'zhixue_db',
  waitForConnections: true,
  connectionLimit: 10,
  queueLimit: 0
};

// 创建数据库连接池
// 连接池可以复用数据库连接，提高性能
const pool = mysql.createPool(DB_CONFIG);

// 测试数据库连接的函数
async function testDatabaseConnection() {
  try {
    const connection = await pool.getConnection();
    console.log('✅ 数据库连接成功！');
    connection.release();
    return true;
  } catch (error) {
    console.error('❌ 数据库连接失败：', error.message);
    return false;
  }
}

// 配置中间件
app.use(cors({  // 解决跨域问题
  origin: ['http://localhost:5173', 'http://localhost:5174', 'http://localhost:5175'],
  credentials: true
}));
app.use(express.json());  // 解析JSON请求体
app.use(express.urlencoded({ extended: true }));  // 解析URL编码的数据

// 基础路由 - 健康检查
app.get('/', (req, res) => {
  res.json({
    message: '智学Web应用后端API服务器',
    version: '1.0.0',
    status: '运行中',
    timestamp: new Date().toISOString()
  });
});

// 学科相关路由
app.get('/api/subjects', async (req, res) => {
  try {
    // 从数据库查询所有学科
    const [rows] = await pool.execute('SELECT * FROM subjects ORDER BY sort_order, name');
    
    res.json({
      success: true,
      data: rows,
      count: rows.length
    });
  } catch (error) {
    console.error('获取学科列表失败：', error);
    res.status(500).json({
      success: false,
      message: '获取学科列表失败',
      error: error.message
    });
  }
});

// 错误处理中间件
app.use((err, req, res, next) => {
  console.error('服务器错误：', err);
  res.status(500).json({
    success: false,
    message: '服务器内部错误',
    error: process.env.NODE_ENV === 'development' ? err.message : 'Internal Server Error'
  });
});

// 404处理
app.use((req, res) => {
  res.status(404).json({
    success: false,
    message: '请求的接口不存在'
  });
});

// 启动服务器
async function startServer() {
  // 先测试数据库连接
  const dbConnected = await testDatabaseConnection();
  
  if (!dbConnected) {
    console.log('等待5秒后重试数据库连接...');
    setTimeout(startServer, 5000);
    return;
  }

  // 启动HTTP服务器
  app.listen(PORT, () => {
    console.log(`🚀 服务器启动成功！`);
    console.log(`📡 监听端口：${PORT}`);
    console.log(`🌐 访问地址：http://localhost:${PORT}`);
    console.log(`📚 API文档：http://localhost:${PORT}/api-docs`);
  });
}

// 优雅关闭
process.on('SIGTERM', () => {
  console.log('收到SIGTERM信号，正在关闭服务器...');
  pool.end().then(() => {
    console.log('数据库连接池已关闭');
    process.exit(0);
  });
});

process.on('SIGINT', () => {
  console.log('收到SIGINT信号，正在关闭服务器...');
  pool.end().then(() => {
    console.log('数据库连接池已关闭');
    process.exit(0);
  });
});

// 启动应用
startServer();

module.exports = app;